import Router from 'koa-router'
import { Blog } from '../db/index.js'

const router = new Router()

// 页面路由：请求注册页
router.get('/sign-up', async (ctx) => {
  await ctx.render('views/auth-page/sign-up.html', {})
})

// 页面路由：请求登录页
router.get('/sign-in', async (ctx) => {
  await ctx.render('views/auth-page/sign-in.html', {})
})

// 页面路由：首页
router.get('/', async (ctx) => {
  // 查询分页数据
  const page = Math.max(ctx.query.page || 1, 1)
  const pagesize = Math.max(ctx.query.pagesize || 1, 2)

  // 分页查询
  const blogs = await Blog.find()
    .skip((page - 1) * pagesize)
    .limit(pagesize)
    .populate({ path: 'author', select: 'username' })
    .populate('cmtCount')
    .exec()

  // 统计博客总数量
  const total = await Blog.countDocuments()

  // 渲染页面
  await ctx.render('views/index.html', {
    user: ctx.session.user,
    isSignIn: ctx.session.isSignIn,
    blogs,
    total,
    page,
    pagesize,
    totalPage: Math.ceil(total / pagesize)
  })
})

// 页面路由：写博客
router.get('/write', async (ctx) => {
  // 如果用户没有登录，则强制跳转到登录页
  if (!ctx.session.isSignIn) return ctx.redirect('/sign-in')
  // 渲染页面
  await ctx.render('views/write.html', {
    user: ctx.session.user,
    isSignIn: ctx.session.isSignIn
  })
})

// 页面路由：博客详情页
router.get('/blog/:id', async (ctx) => {
  const id = ctx.params.id

  // 根据id查询博客
  const blog = await Blog.findOne({ _id: id })
    .populate({ path: 'author', select: 'username' })
    .populate({
      path: 'comments',
      options: {
        // 排序
        sort: { time: -1 }
      },
      // 嵌套查询
      populate: { path: 'user', select: 'username' }
    })

  await ctx.render('views/detail.html', {
    user: ctx.session.user,
    isSignIn: ctx.session.isSignIn,
    blog
  })
})

// 页面路由：修改博客
router.get('/edit/:id', async (ctx) => {
  // 如果用户没有登录，则强制跳转到登录页
  if (!ctx.session.isSignIn) return ctx.redirect('/sign-in')

  const id = ctx.params.id

  const blog = await Blog.findOne({ _id: id })

  await ctx.render('views/edit.html', {
    user: ctx.session.user,
    isSignIn: ctx.session.isSignIn,
    blog
  })
})

export default router
